package cn.enjoy.tool.base;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

/**
 * @author K
 */
public class FunctionInterface {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5);

        // Predicate<Integer> predicate = n -> true
        // Predicate的test接口实现为：true
        System.out.println("输出所有数据:");
        Predicate<Integer> predicate = x -> true;
        eval(list, predicate);
        eval(list, x -> true);

        // Predicate<Integer> predicate = n -> n%2 == 0
        // Predicate的test接口实现为：x % 2 == 0
        // 如果n%2等于0，test方法返回true
        System.out.println("输出所有偶数:");
        eval(list, x -> x % 2 == 0);

        // Predicate<Integer> predicate = n -> n > 3
        // Predicate的test接口实现为：n > 3
        // 如果n大于3，test方法返回true
        System.out.println("输出大于 3 的所有数字:");
        eval(list, n -> n > 3);

        // Predicate<Integer> pre1 = n -> n % 2 == 0
        // pre1的test接口实现为：x % 2 == 0
        // Predicate<Integer> pre2 = n -> n > 0
        // pre2的test接口实现为：n > 0
        System.out.println("输出大于 0 的偶数:");
        eval2(list, n -> n % 2 == 0, n -> n > 0);

//        GreetingService greetingService = System.out::println;
        GreetingService greetingService = x -> System.out.println(x);
        greetingService.sayMessage("hello");
        greetingService.sayHello("danny");

    }

    public static void eval(List<Integer> list, Predicate<Integer> predicate) {
        for (Integer n : list) {
            // 走对应的判断条件
            if (predicate.test(n)) {
                System.out.println(n + " ");
            }
        }
    }

    public static void eval2(List<Integer> list, Predicate<Integer> pre1, Predicate<Integer> pre2) {
        for (Integer n : list) {
            if (pre1.and(pre2).test(n)) {
                System.out.println(n + " ");
            }
//            if (pre1.test(n) && pre2.test(n)) {
//                System.out.println(n + " ");
//            }
        }
    }

}